#include <iostream>

#include "iostream"
#include "vector"
#include "unordered_map"
#include "unordered_set"
#include "algorithm"
#include "string"
#include "list"
#include "string.h"


class OneLoop {
public:
    std::vector<std::vector<int64_t>> dp;
    int64_t calc_dp(int64_t a_size,int64_t sum){
        if(sum==0){
            //要0个a，即全为b，方案数为1
            return 1;
        }
        int64_t max=0;
        for(int64_t i=1;i<=a_size;i++){
            for(int64_t j=1;j<=sum;j++){
                if(i==1){//只能选size 1,
                    if(j==1){
                        dp[i][j]=1;
                    }else{
                        dp[i][j]=0;
                    }
                }
                else if(i>j){
                    //超出容量,i选不了，所以等于0~i-1
                    dp[i][j]=dp[i-1][j];
                }else{
                    if(j==i){
                        dp[i][j]=dp[i-1][j]+1;//i==j容量为0，
                    }else{
                        dp[i][j]=dp[i-1][j]+dp[i-1][j-i];//i==j容量为0，
                    }
                }
                max= std::max(max,dp[i][j]);
            }
        }
        return max;
    }

    bool run(int64_t n,int64_t s,int64_t a,int64_t b) {
        int64_t op_cnt=n*(n-1)/2;
        int64_t x,y=0;

        std::vector<int64_t> line(op_cnt+1);
        for(int64_t i=0;i<n+1;i++) {
            dp.push_back(line);
        }

        calc_dp(n-1,op_cnt);
        int64_t cnt=0;
        for(y=0;y<=op_cnt;y++){
            int64_t nx=s+(op_cnt-y)*b-y*a;

            if(nx%n==0){
                x=nx/n;
                //已经确定了一组x，y
                //即要又y个a
                //然而a(操作又需要服从一个规律）
                //a的个数从2到n选，刚好装满y
                if(y==0){
                    cnt++;
                }else{
                    cnt+= dp[n-1][y];//calc_dp(n-1,y);
                }
                cnt%=100000007;
            }
//            y++;
        }
        printf("%lld\n",cnt);
                return true;
    }
};

class Solution {
public:
    void run() {

        bool first = true;
        int64_t a, b, c, d, e;
        char cc;
        //        std::cin >> a;
//        std::string s1,s2;
//        while (1){
        while (
                std::cin>>a>>b>>c>>d
//                std::getline(std::cin,s1)
//                1
                ) {
//            std::getline(std::cin,s2);
            OneLoop l;
            if (!l.run(a,b,c,d)) {
//                return;
            }
        }


    }
};

int main() {

    //    bool cur_num= true;
    Solution().run();
    return 0;
}

